---
title: 整体架构
---

# 整体架构

与传统的单体或微服务系统相比，Mall 具有以下优势：
- 业务代码与技术代码无关性，业务代码使用领域模型，技术代码使用框架
- 面向接口编程，纯接口化的设计，可以将接口与实现高度分离，凝聚关注点
- 不绑定具体的部署环境，既可以单机部署、集群部署也可以微服务部署

在系统设计上，Mall 系统将整体架构拆分成了多个模块，各模块之间互相通信，组成完整的 Mall 系统。对应的模块图如下：

![Omf Modules](./omf-modules.png)

- Test：用于测试，主要依赖了、测试环境、数据库、框架、第三方 SDK 等必要的测试组件。
- Commons-Core：主要提供了  `Configuration` 、`Validation` 、`I18N` 、`Repository Interface` 以及一些公共模型等。
- Shared：是一个共享内核，主要包括了 `Captcha 验证码` 、`District 行政区域` 、`SMS 短信服务` 、`Mail 邮箱服务` 等第三方法集成服务。
- Keystone：主要包括由 `身份（identity）` 和 `安全（security）` 两个模块组成。
    - 身份：由 `租户（Tenant）` 、`用户（User）` 两部分构成。
    - 安全：由 `主体（Subject）` 、`角色（Role）` 、`ACL（Access Control List）` 、`RBAC（Role-Based Access Control）` 、`认证（Authentication）` 五个部分构成。
- Storage：提供对象存储的支持。
- Shipping：提供物流相关的支持。
- Payment：提供一个统一的支付网关，内部实现与第三方支付集成。
- Trade：交易子系统，管理整个系统的交易信息，比如：支付、支出、转账、提现等。
- Customer：提供有关顾客的功能，比如：顾客信息、收货地址、积分、搜索词条等功能。
- Store：这是一个电商系统中的业务核心，`Catalog` 、 `Marketing`、 `Order` 等模块都直接或者间接依赖它。
- Catalog：商品类目模块包括了所有有关商品的功能，包括：商品类目、商品集合、品牌、商品、商品变体、商品选项等等有关商品的模型。
- Marketing：提供市场营销的支持，例如：优惠券、秒杀、拼团等促销业务。
- Order：提供加购、下单、打包、发货、售后等有关订单方面的业务。
- Application：提供程序、菜单等业务。
- DOM：提供基本的 DOM 模型，为视图组件（View Components）提供基础模型。
- Content：提供 CMS 功能，并提供一个 `View Components AST` 。
- EDW：整个系统的数据仓库，用于管理维度模型。
- Analytics：基于数据仓库（EDW）的维度模型提供分析服务，比如：报表、推荐、风控等数据。

## 面向接口编程

整套系统是一个接口化设计的系统，将每一个模块设计成 `xxx-api` 和 `xxx` 的项目结构，比如 Store 模块设计为 `store-api` 和 `store` 两个子项目。其中 `xxx-api` 中只包括接口，`xxx` 项目对 `xxx-api` 项目中的接口进行实现。对应的项目图如下：

![Store UML](./store-uml.jpg)

这样设计的好处在于高内聚低耦合以及关注点凝聚，
